package com.集合.Collection___.Set_.HashSet__;
@SuppressWarnings("all")
public class HashSet模拟_数组加链表 {
    public static void main(String[] args) {

        /**
         * 1.数组+链表 大大提高了效率；
         *   1.1数组存放每个链表的头节点，在头节点后面可以任意添加节点形成链表；
         *   1.2可以通过索引快速找到指定链表的头节点；
         */
        Node node[] = new Node[5];//创建存放Node节点的数组；

        Node hsp0 = new Node("韩顺平", null);//创建一个节点对象hsp0
        node [0] = hsp0;//将头节点存放到数组索引为0的地址；
        Node hsp1 = new Node("hsp-No1", null);//创建一个节点对象hsp1
        hsp0.next = hsp1;//将hsp1连接到hsp0的Next节点上；即：hsp0的下一个节点是hsp1，   hsp0->hsp1
        Node hsp2 = new Node("hsp-No2", null);//创建一个新的节点对象hsp2
        hsp1.next = hsp2;//将hsp2连接到hsp1的Next节点上；即：hsp1的下一个节点是hsp2，   hsp0->hsp1->hsp2
        Node hsp3 = new Node("hsp-No3", null);//创建一个新的节点对象hsp3
        hsp2.next = hsp3;//将hsp3连接到hsp2的Next节点上；即：hsp2的下一个节点是hsp3，   hsp0->hsp1->hsp2->hsp3
        //最终形成一条链表

        //同样的操作；
        Node cl0 = new Node("成龙", null);
        node[1] = cl0;
        Node cl1 = new Node("成龙1号", null);
        cl0.next = cl1;
        Node cl2 = new Node("成龙2号", null);
        cl1.next = cl2;
        Node cl3 = new Node("成龙3号", null);
        cl2.next = cl3;

        //只有一个头节点；
        Node jeak = new Node("jeak", null);
        node[2] = jeak;


        Node next = null;  //存放每次遍历的头节点；
        for (int i = 0; i < node.length; i++) {
            next = node[i];//存放头节点
            while(next != null){//判断节点是否为空；
                System.out.printf(next+"\t");//输出该节点的元素；
                next = next.next;//得到下一个节点；如果为空，就会退出循环，到下一个索引的头节点；
            }
            System.out.println();
        }

    }
}
@SuppressWarnings("all")
 class Node{
    Object item;
    Node next;
    public Node(Object item, Node next) {
        this.item = item;
        this.next = next;
    }

     @Override
     public String toString() {
         return item+"";
     }
     /**
      * 数组存放每个链表的头节点，在头节点后面可以任意添加节点形成链表；
      * 每个节点的next指向下一个节点，促成了链表；
      ______
      |hsp0|--->hsp1--->hsp2--->hsp3--->null
      |____|
      |cl0 |--->cl1--->cl2--->cl3--->null
      |____|
      |jeak| --->null
      |____|
      |null|
      |____|
      |null|
      |____|










      */
 }